perm filename C1DUMP.FAI[SS,SYS] blob sn#356003 filedate 1978-05-23 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE C1DUMP PROGRAM TO GOBBLE DSK HUNG TIMEOUT STUFF FROM MONITOR INTO A FILE
C00004 00003	START
C00008 00004	CHANNL LTLOOP LNLOOP BYLOOP PGM1LP PGM2LP PGMHLP PGMHL2
C00011 00005	CRLF STROUT STROU1 OCTOUT OCTOU1 OCTOU2 DEC2 DECOUT DECOU1 DECOU2 HEX3 HEX2 HEX1 CPOPJ
C00013 ENDMK
C⊗;
TITLE C1DUMP PROGRAM TO GOBBLE DSK HUNG TIMEOUT STUFF FROM MONITOR INTO A FILE

A←1
B←2
C←3
D←4
X←10
Y←11
H←12
T←13
P←17

ACWPRV←←40

NPACKS←←6
C1PPTR←←2
C1INST←←4

C1ALSV:	BLOCK 10
C1ADSV:	BLOCK 100+10
C1APSV:	BLOCK C1PPTR+NPACKS+1
C1AGSV:	BLOCK NPACKS*C1INST		;PROGRAM HEADERS
C1BLSV:	BLOCK 10
C1BDSV:	BLOCK 100+10
C1BPSV:	BLOCK C1PPTR+NPACKS+1
C1BGSV:	BLOCK NPACKS*C1INST		;PROGRAM HEADERS
C1SAVE::

TABLE:	[ASCIZ /	/]
	[ASCIZ /Stat A	/]
	[ASCIZ /Stat B	/]
	[ASCIZ /Stat C	/]
IFN .-TABLE-C1INST,<.FATAL TABLE length wrong for C1INST>

MONTAB:	ASCIZ /Jan/
	ASCIZ /Feb/
	ASCIZ /Mar/
	ASCIZ /Apr/
	ASCIZ /May/
	ASCIZ /Jun/
	ASCIZ /Jul/
	ASCIZ /Aug/
	ASCIZ /Sep/
	ASCIZ /Oct/
	ASCIZ /Nov/
	ASCIZ /Dec/

FILE:	'C1DUMP'
	'TXT   '
	0
	' SSSYS'

LPDL←←20
PDL:	BLOCK LPDL

BUFFER:	BLOCK =10000/5
;START

START:	RESET
	MOVE P,[IOWD LPDL,PDL]
	MOVSI A,ACWPRV
	SETPRV A,
	TLNN A,ACWPRV
	 JRST [OUTSTR [ASCIZ /No ACW/] ↔ EXIT]
	MOVSI A,377776
	SETPR2 A,
	 JRST [OUTSTR [ASCIZ /No SETPR2/] ↔ EXIT]
	MOVEI A,[RADIX50 0,C1ALSV ↔ 0]
	.SYML A,
	 JRST [OUTSTR [ASCIZ /No .SYML/] ↔ EXIT]
	SKIPN 400000+C1APSV-C1ALSV(A)	;FLAG IN THE MONITOR THAT WE'VE GOT IT
	JRST [OUTSTR [ASCIZ /No new poop/] ↔ EXIT]
	MOVSI B,400000(A)		;SOURCE OF BLT
	HRRI B,C1ALSV			;DESTINATION OF BLT
	BLT B,C1SAVE-1
	SETZM 400000+C1APSV-C1ALSV(A)	;FLAG IN THE MONITOR THAT WE'VE GOT IT
	DETSEG				;GET RID OF ACWNESS
	INIT 17
	 'DSK   '
	 0
	 JRST [OUTSTR [ASCIZ /No DSK/] ↔ EXIT]
	DMOVE A,FILE			;GET LOOKUP BLOCK
	DMOVE C,FILE+2
	SETZM NEWF#
	LOOKUP A
	 CAIA
	JRST STRT1
	TRNE B,-1			;ERROR, SKIP IF NO SUCH FILE
	JRST NOFILE
	SETOM NEWF
STRT1:	ENTER FILE			;R/A OR CREATE NEW FILE
	 JRST NOFILE
	UGETF A				;GET TO THE END
	MOVE D,[POINT 7,BUFFER]
	PUSHJ P,HEADER
	MOVEI B,[ASCIZ /CHANNEL A:
/]
	PUSHJ P,STROUT
	MOVEI X,C1ALSV			;POOP POINTER
	PUSHJ P,CHANNL
	MOVEI B,[ASCIZ /

CHANNEL B:
/]
	PUSHJ P,STROUT
	MOVEI X,C1BLSV			;POOP POINTER
	PUSHJ P,CHANNL
	MOVEI A,BUFFER-1
	SUBI D,BUFFER-1			;LENGTH
	MOVNS D
	HRLI A,(D)
	MOVEI B,0
	OUTPUT A
	EXIT				;GOOD NIGHT

NOFILE:	OUTSTR [ASCIZ /No file/]
	EXIT

HEADER:	MOVEI A,14
	SKIPN NEWF
	IDPB A,D
	MOVEI B,[ASCIZ /Disk channel hung timeout log entry - /]
	PUSHJ P,STROUT
	ACCTIM A,
	PUSH P,A
	HLRZ A,A
	IDIVI A,=31			;B←DAY-1
	ADDI B,1
	PUSHJ P,DECOUT
	MOVEI B,"-"
	IDPB B,D
	IDIVI A,=12			;A←YEAR-64, B←MONTH-1
	MOVEI B,MONTAB(B)
	PUSH P,A
	PUSHJ P,STROUT
	POP P,A
	MOVEI B,"-"
	IDPB B,D
	MOVEI B,=64(A)
	PUSHJ P,DECOUT
	MOVEI B,40
	IDPB B,D
	IDPB B,D
	POP P,A
	HRRZ A,A
	IDIVI A,=60			;MINUTES AFTER MIDNIGHT
	IDIVI A,=60			;A←HOURS, B←MINUTES
	PUSH P,B
	MOVE B,A
	PUSHJ P,DEC2
	MOVEI B,":"
	IDPB B,D
	POP P,B
	PUSHJ P,DEC2
	PUSHJ P,CRLF
	JRST CRLF
;CHANNL LTLOOP LNLOOP BYLOOP PGM1LP PGM2LP PGMHLP PGMHL2

CHANNL:	MOVEI B,[ASCIZ /LIGHTS:
/]
	PUSHJ P,STROUT
	MOVSI C,-10			;AOBJN POINTER TO LIGHTS
LTLOOP:	MOVEI A,"0"(C)			;NUMBER OF WORD IN TABLE
	IDPB A,D
	MOVEI B,[ASCIZ /:  /]
	PUSHJ P,STROUT
	MOVE B,(X)
	PUSHJ P,OCTOUT
	PUSHJ P,CRLF
	ADDI X,1
	AOBJN C,LTLOOP
	MOVEI B,[ASCIZ/

	 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F

/]
	PUSHJ P,STROUT
	MOVSI H,-100*4/20		;HOW MANY LINES
	HRLI X,441000			;BPT TO HEX BYTES
LNLOOP:	MOVSI C,-20
	MOVEI B,(H)			;FIRST 3 HIGITS OF ADDR
	PUSHJ P,HEX3
	MOVEI B,[ASCIZ /x	/]
	PUSHJ P,STROUT
BYLOOP:	ILDB B,X
	PUSHJ P,HEX2
	MOVEI B,[ASCIZ /  /]
	PUSHJ P,STROUT
	AOBJN C,BYLOOP
	PUSHJ P,CRLF
	AOBJN H,LNLOOP
	CAIN H,4000/20
	JRST PGMNXT
	MOVE H,[-2,,<4000-40>/20]
	JRST LNLOOP

PGMNXT:	MOVEI X,1(X)
	MOVEI B,[ASCIZ /
PROGRAM TABLE

/]
	PUSHJ P,STROUT
	HRLI X,-C1PPTR			;AOBJN POINTER
PGM1LP:	MOVEI A,11
	IDPB A,D
	MOVE B,(X)
	PUSHJ P,OCTOUT
	PUSHJ P,CRLF
	AOBJN X,PGM1LP
	HRLI X,-NPACKS
	MOVEI H,"0"
PGM2LP:	MOVEI B,[ASCIZ /PACK /]
	PUSHJ P,STROUT
	IDPB H,D
	MOVEI A,11
	IDPB A,D
	MOVE B,(X)
	PUSHJ P,OCTOUT
	PUSHJ P,CRLF
	ADDI H,1
	AOBJN X,PGM2LP
	MOVEI A,11
	IDPB A,D
	MOVE B,(X)
	PUSHJ P,OCTOUT
	PUSHJ P,CRLF
	ADDI X,1
	MOVEI B,[ASCIZ /
PROGRAM HEADERS

/]
	PUSHJ P,STROUT
	MOVEI H,"0"
	MOVSI C,-NPACKS
PGMHLP:	MOVEI B,[ASCIZ /
PACK /]
	PUSHJ P,STROUT
	IDPB H,D
	PUSHJ P,CRLF
	HRLI X,-C1INST
	MOVEI Y,0
PGMHL2:	MOVE B,TABLE(Y)
	PUSHJ P,STROUT
	MOVE B,(X)
	PUSHJ P,OCTOUT
	PUSHJ P,CRLF
	ADDI Y,1
	AOBJN X,PGMHL2
	ADDI H,1
	AOBJN C,PGMHLP
	POPJ P,
;CRLF STROUT STROU1 OCTOUT OCTOU1 OCTOU2 DEC2 DECOUT DECOU1 DECOU2 HEX3 HEX2 HEX1 CPOPJ

CRLF:	MOVEI B,[ASCIZ /
/]
STROUT:	HRLI B,440700
STROU1:	ILDB A,B
	JUMPE A,CPOPJ
	IDPB A,D
	JRST STROU1

OCTOUT:	PUSH P,B
	HLLZS B
	PUSHJ P,OCTOU1
	MOVEI A,40
	IDPB A,D
	POP P,B
	MOVSI B,(B)
OCTOU1:	HRRI B,400000
OCTOU2:	MOVEI A,0
	LSHC A,3
	JUMPE B,CPOPJ
	ADDI A,"0"
	IDPB A,D
	JRST OCTOU2

DEC2:	MOVEI A,"0"
	CAIGE B,=10
	IDPB A,D
DECOUT:	PUSH P,C
	PUSHJ P,DECOU1
	POP P,C
	POPJ P,

DECOU1:	IDIVI B,=10
	JUMPE B,DECOU2
	HRLM C,(P)
	PUSHJ P,DECOU1
	HLRZ C,(P)
DECOU2:	ADDI C,"0"
	IDPB C,D
	POPJ P,

HEX3:	LDB A,[POINT 4,B,27]
	PUSHJ P,HEX1
HEX2:	LDB A,[POINT 4,B,31]
	PUSHJ P,HEX1
	LDB A,[POINT 4,B,35]
HEX1:	CAILE A,9
	ADDI A,"A"-12-"0"
	ADDI A,"0"
	IDPB A,D
CPOPJ:	POPJ P,

	END START